Skip to content

fix(test_integrity_v2): widen HRV subject request to absorb wfdb flake#168

Closed
neuron7x wants to merge 1 commit intoneuron7xLab:mainfrom
neuron7x:fix/hrv-test-flake-margin
Closed

fix(test_integrity_v2): widen HRV subject request to absorb wfdb flake#168
neuron7x wants to merge 1 commit intoneuron7xLab:mainfrom
neuron7x:fix/hrv-test-flake-margin

Conversation

@neuron7x
Copy link
Copy Markdown
Contributor

@neuron7x neuron7x commented May 1, 2026

Summary

  • TestHRV::test_gamma_in_range запитує n_subjects=3 при _ensure_loaded floor=3 — нульовий запас. Один пропущений PhysioNet/wfdb запис → RuntimeError: Insufficient HRV data: 2 subjects (run 25184505044, Verify 3.12). Той самий SHA пройшов на 3.10/3.11 — чистий мережевий flake, не Python-регресія.
  • Підіймаю запит до 5 (margin=2). Floor (3) і фізичний коридор γ ∈ [0.5, 1.5] без змін.

Test plan

  • CI Verify (3.10/3.11/3.12) має пройти всі тести зеленими
  • HRV adapter floor=3 збережено — будь-який резерв ≥2 захищає від одиночного network drop
  • Соак: відстежити кілька наступних main-runs щоб переконатись що flake не повторюється

Claim status

claim_status: derived

Pure CI hygiene PR — жодного нового вимірювального claim. Зміна лише виправляє test fixture брак запасу, повертає тест до попередньо встановленої поведінки. Floor enforcement (≥3 суб'єктів) і physics range залишаються тими ж, тож логіка випливає з вже існуючого канону.

🤖 Generated with Claude Code

TestHRV::test_gamma_in_range requested n_subjects=3 — exactly the
floor enforced in HRVPhysioNetAdapter._ensure_loaded. A single
PhysioNet/wfdb network glitch dropping one record made the test fail
with "Insufficient HRV data: 2 subjects" (CI run 25184505044, Verify
3.12). Same SHA passed on Verify 3.10 and 3.11 — pure transient
flake, not a Python-version regression.

Raise the ask to 5 (margin of 2) so the test stays green when up to
two records are skipped during _load(). Floor and physics are
unchanged.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@neuron7x
Copy link
Copy Markdown
Contributor Author

neuron7x commented May 1, 2026

Superseded by #169 — first-principles split: synthetic 1/f math + monkeypatched floor + opt-in real-data integration. The n_subjects=3→5 bump in this PR is a margin bandaid; #169 removes the network from the PR-blocking critical path entirely while preserving real-data validation as an opt-in gate.

@neuron7x neuron7x closed this May 1, 2026
neuron7xLab added a commit that referenced this pull request May 1, 2026
…al-data (#169)

The previous TestHRV.test_gamma_in_range coupled three orthogonal claims
into one mandatory mid-CI network call:

  1. compute_gamma maths recovers γ ≈ 1 from a 1/f PSD,
  2. _ensure_loaded enforces the 3-subject floor,
  3. real PhysioNet/NSR2DB data lies in the physiological band.

The single point of failure (PhysioNet/wfdb network) made (1) and (2)
non-testable when the network flaked, and forced #168 to bump n_subjects
3→5 — a margin bandaid, not a fix.

This change reduces the test to first principles by splitting along the
three axes:

  • test_compute_gamma_recovers_unity_from_synthetic_1f
      Always-on. Synthesises a 1/f signal through the same VLF-band
      Welch+mask the adapter uses; no wfdb, no network. Catches the
      maths regressing.
  • test_floor_minimum_enforced
      Always-on. Monkeypatches HRVPhysioNetAdapter._load to return one
      subject below the 3-subject floor and asserts the documented
      RuntimeError. Catches floor regressions without network.
  • test_real_data_gamma_in_range
      Opt-in via NEOSYNAPTEX_RUN_NETWORK_TESTS=1. Exercises the full
      wfdb→PSD→γ pipeline on real NSR2DB data; no longer on the PR
      critical path, so PhysioNet flakes cannot block merges. Intended
      to run in a dedicated nightly/scheduled CI lane.

The floor constant (_HRV_FLOOR_MIN_SUBJECTS = 3) is named, not magic.
The CI-run-id comment from #168 is removed — the test no longer
depends on transient network state, so the diagnostic context is
documented in this commit message instead of polluting the source.

Supersedes #168.

Co-authored-by: Yaroslav Vasylenko <neuron7x@gmail.com>
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants